package com.java.blocking_queue;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;

public class Main {
    public static void main(String[] args) {
        // 打印结果可能存在多线程安全问题！此处阻塞队列容量为1则实际一定是生产一份消费一份，且数据数量只能为0或1
        /*BlockingQueue<String> blockingQueue1 = new ArrayBlockingQueue<>(1);
        new Producer(blockingQueue1).start();
        new Consumer(blockingQueue1).start();*/

        /**
         * 输出结果如下，一定是生产一份消费一份
         * 生产者生产，数据数量为1
         * 消费者消费，数据数量为0
         * 生产者生产，数据数量为1
         * 消费者消费，数据数量为0
         * ...
         */

        // 打印结果可能存在多线程安全问题！此处阻塞队列容量为3则数据数量只能为0、1、2、3
        BlockingQueue<String> blockingQueue2 = new ArrayBlockingQueue<>(3);
        new Producer(blockingQueue2).start();
        new Consumer(blockingQueue2).start();

        /**
         * 输出结果如下，一定是生产一份消费一份
         * 生产者生产，数据数量为1
         * 生产者生产，数据数量为2
         * 消费者消费，数据数量为1
         * 生产者生产，数据数量为2
         * 生产者生产，数据数量为3
         * 消费者消费，数据数量为2
         * 消费者消费，数据数量为1
         * 消费者消费，数据数量为0
         * ...
         */
    }
}
